package com.ld.control.business.process.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.ld.control.business.process.model.ProcessNodeExampleModel;
import com.ld.control.business.process.model.ext.ProcessNodeExampleInfoExt;
import com.ld.control.business.process.vo.resp.NodeExampleStatusResp;
import com.ld.control.business.process.vo.resp.NodeExtInfo;
import com.ld.control.business.process.vo.resp.ProcessForNodeRespVo;
import com.ld.control.business.process.vo.resp.ProcessNodeExampleDetailsResp;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 任务流程节点实例表 服务类
 * </p>
 *
 * @author wangfeng
 * @since 2024-05-21
 */
public interface ProcessNodeExampleService extends IService<ProcessNodeExampleModel> {

    /**
     * 查询流程中的开始节点信息
     * @param processExampleId
     * @return
     */
    ProcessNodeExampleModel getStartNodeInfo(Long processExampleId);

    /**
     * 运行当前节点下一个节点，如果返回false则代表执行失败
     *
     * @param processNodeExampleId
     */
    void runNextNode(Long processNodeExampleId);

    /**
     * 运行某个节点
     * @param processNodeExampleModel
     */
    void runNode(ProcessNodeExampleModel processNodeExampleModel);

    /**
     * 修改节点状态
     * @param processNodeExampleId
     * @param status
     */
    void updateNodeStatus(Long processNodeExampleId, Integer status);

    /**
     * 获取某个节点的完整信息
     * @param processNodeExampleId
     * @return
     */
    ProcessNodeExampleInfoExt getProcessNodeExampleModelExt(Long processNodeExampleId);

    /**
     *
     * @param processExampleId
     * @return
     */
    Map<String, NodeExtInfo> getNoteExtInfoMap(Long processExampleId);

    /**
     * 获取某个节点实例的详情
     * @param processNodeExampleId
     * @return
     */
    ProcessNodeExampleDetailsResp getProcessNodeExampleDetails(Long processNodeExampleId);

    /**
     * 获取某个流程下所有节点状态
     * @param processExampleId
     * @return
     */
    List<NodeExampleStatusResp> getAllNodeExampleStatus(Long processExampleId);

    /**
     * 获取ProcessFor节点的信息
     * @param parentId
     * @return
     */
    List<ProcessForNodeRespVo> getProcessForNodeInfo(Long parentId);

    /**
     * 运行确认节点下一个节点
     * @param id
     */
    void updateConfirmNodeFlag(Long id);

}
